<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        //----------------------------------- str.trim()
            // let str = " i love you  ";
            // console.log(str);
            // console.log(str.trim());

        //----------------------------------- Array.isArray()
        // let arr = [];
        // console.log(Array.isArray(arr));
        // console.log(Array.isArray("arr"));

        //----------------------------------- arr.forEach()      es3
        // let arr = ["a","b","c"];
        // let results = arr.forEach(function(a, index ,arr){
        //     if(a == "b" || a == "c"){
        //         return;
        //     }
        //     console.log("this:",this);
        //     console.log("first parameter:", a);
        //     console.log("second parameter:", index);
        //     console.log("third parameter:", arr);
        //     return 1;
        // },arr);
        // console.log("results:", results);

        //----------------------------------- arr.map()      es1.6
        // let arr = ["a","b","c"];
        // let results = arr.map(function(a, index ,arr){
        //     if(a != "b"){
        //         return a + 1;
        //     }
        //     console.log("this:",this);
        //     console.log("first parameter:", a);
        //     console.log("second parameter:", index);
        //     console.log("third parameter:", arr);
        //     return 1;
        // },arr);
        // console.log("results:", results);

        //----------------------------------- arr.filter()      es1.6
        // let arr = ["a","b","c"];
        // let results = arr.filter(function(a, index ,arr){
        //     console.log("this:",this);
        //     console.log("first parameter:", a);
        //     console.log("second parameter:", index);
        //     console.log("third parameter:", arr);
        //     return a != "b";
        // },arr);
        // console.log("results:", results);

        //----------------------------------- arr.indexOf()      es1.6
        // let arr = ["a", "b", "c", "d", "b", "c", "d"];
        // console.log(arr.indexOf("b"));
        // console.log(arr.indexOf("b", 2));
        // console.log(arr.indexOf("b", 5));

        // ----------------------------------- arr.lastIndexOf()      es1.6
        // let arr = ["a", "b", "c", "d", "b", "c", "d"];
        // console.log(arr.lastIndexOf("b"));
        // console.log(arr.lastIndexOf("b", 3));
        // console.log(arr.lastIndexOf("b", 0));

        // ----------------------------------- JSON.parse()
        // let jsonstr = '{"name":"jim","a":[{"age":"12","sex":"male"},{"age":"20","sex":"female"}]}';
        // console.log(JSON.parse(jsonstr));
        // let objstr = JSON.parse(jsonstr,function(k,v){
        //     // console.log(k, v);
        //     if(k == "a"){
        //         return "a的值"; 
        //     }
        //     return v;
        // })
        // console.log(objstr);

        // ----------------------------------- JSON.stringify()
        // let obj = {
        //     name: "jim",
        //     age: 12,
        //     sex: "female",
        //     hobby: ["play basketball", "play computer games"]
        // }
        // let stringObj = JSON.stringify(obj,function(k,v){
        //     if(k == "age" || v == 12){
        //         return "未成年";
        //     }
        //     return v;
        // },"\t"); //或者为数字
        // console.log(stringObj);

        // ----------------------------------- Date.now()
        // let time = new Date().getTime();
        // console.log(time);
        // console.log(Date.now());
        // console.log(time == Date.now());

        // ----------------------------------- Setter Getter
        // let obj = {
        //     name: "",
        //     age: 12,
        //     sex: "female",
        //     hobby: ["play basketball", "play computer games", ""],
        //     set sname(name){
        //         this.name = name.slice(0,1).toUpperCase() + name.slice(1);
        //     },
        //     get ghobby(){
        //         this.hobby[this.hobby.length-1] = "read book";
        //         return this.hobby;
        //     }
        // }
        // obj.sname = "duan";
        // console.log(obj.name);
        // console.log(obj.ghobby);

        // ----------------------------------- str.charAt()
        // let str = "hello world";
        // console.log(str[6]);
        // console.log(str.charAt(6));

        // ----------------------------------- obj arr的定义中可使用尾随逗号
        // let obj = {
        //     name:"jim",
        //     age:12,
        // };
        // let arr = ["apple", "pear", "orange",];
        // console.log(obj);
        // console.log(arr);

        // ----------------------------------- str 多行字符串
        // let str = "hello \
        // world";
        // document.write(str);
        // console.log(str);

        // ----------------------------------- 保留字作为属性名称
        // let obj = {name: "jim", new: "jim duan"};
        // console.log(obj.new);

        // ----------------------------------- Object.defineProperty()
        // let obj = Object.defineProperty({age:12},"name",{
        //     // value: "jim",
        //     get: function(){
        //         return name.slice(0,1).toUpperCase() + name.slice(1);
        //     },
        //     set: function(v){
        //         name = v;
        //     },
        //     // writable: true,
        //     enumerable: true,
        //     configurable: false
        // })

        // //--- get set 需要同时存在，get set 与value或writable不可共存
        // obj.name = "alice";
        // console.log(obj.name);
        
        //---  writable
        // obj.name = "tom";
        // console.log(obj.name);

        //---  enumerable
        // for(let key in obj){
        //     console.log(obj[key]);
        // }

        //---  configurable
        //** value和writable不受影响
        // Object.defineProperty(obj,"name",{
        //     writable: false
        // })
        // obj.name = "li";
        // console.log(obj.name);
        //** 属性可否删除和其它特性（包括configurable自身）是否可以被修改
        // Object.defineProperty(obj,"name",{   //前面configurabler为false则报错，特性不可以修改
        //     enumerable: false
        // })
        // for(let key in obj){
        //     console.log(obj[key]);
        // }
        


    </script>
</body>
</html>